﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Liquidaciones.Models
{
    [Table("Empleado")]
    public class Empleado : IComparable
    {
        [Column("id")]
        [Key]        
        public Guid IdEmpleado { get; set; }

        [Column("nombre")]
        public String Nombre { get; set; }

        [Column("apellido")]
        public String Apellido { get; set; }

        [Column("dni")]
        public String Dni { get; set; }

        [Column("sueldo")]
        public double Sueldo { get; set; }

        [Column("email")]
        public String Email { get; set; }

        [Column("categoria")]
        public String Categoria { get; set; }

        [Column("nacimiento")]
        public DateTime Nacimiento { get; set; }

        [Column("edad")]
        public int Edad { get; set; }

        [Column("liquidado")]
        public bool Liquidado { get; set; }

        [Column("foto")]
        public byte[] Foto { get; set; }    //Foto del empleado, las fotos se guardan en la base de datos como BLOB.

        public virtual List<Liquidacion> MisLiquidaciones { get; set; }

        public Empleado() { }

        public Empleado(Guid id, String nombre, String apellido, String dni, String email, long cuenta, DateTime nacimiento, String categoria, byte[] foto)
        {
            this.IdEmpleado = id;
            this.Nombre = nombre;
            this.Apellido = apellido;
            this.Dni = dni;
            this.Email = email;
            this.Categoria = categoria;
            this.Foto = foto;
            this.Nacimiento = nacimiento;
            this.MisLiquidaciones = new List<Liquidacion>();
            this.Edad = DateTime.Now.Year - nacimiento.Year;
            if (DateTime.Now.Month < nacimiento.Month || DateTime.Now.Month == nacimiento.Month && DateTime.Now.Day < nacimiento.Day)
                this.Edad--;
        }

        #region IComparable Members

        public int CompareTo(object obj)
        {
            Empleado e = (Empleado)obj;

            int resultado = String.Compare(this.Apellido, e.Apellido);
            if (resultado == 0)
            {
                resultado = String.Compare(this.Nombre, e.Nombre);
            }
            return resultado;
        }

        #endregion
    }
}